The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
The client-server model of computing allows a server computer to provide services to one or more client computing devices. By using server computers to store data, client computing devices can obtain access to large amounts of data that cannot be directly stored on the client computing device due to storage constraints. Additionally, server computers may provide services for client computing devices such as performing computations or sharing resources so that a client computing device can perform functions it would not be able to perform alone.
Generally, for a client computing device to use the services of a server computer, the server computer must be currently running at the time the client requests services. If the server computer is not then-currently running, the server computer would be unable to respond to a request to connect from the client computing device. Historically, one or more servers would be provisioned for a large number of client computing devices. These servers may be powered on and off manually or automatically for periods of time where server usage is expected to be high. Similar processes may be used to selectively activate or “spin up” virtual machine instances, for example, using cloud computing environments.
While historically servers were provisioned to service large numbers of client computing devices, modern server computers may be provisioned for one or two client computers. In the case of cloud computing, virtual servers may be provisioned in the cloud for individual computing devices. The virtual servers may include one or more applications that allow the server to run independently. For example, a software container includes a server instance and each application necessary to run the server instance on its own on either a home computer, physical server computer, or in the cloud. Such containers may be used to provision individual servers for individual users or for small groups of users.
While personal servers can be useful for allowing individual users to store large amounts of data, server usage can become expensive. Resources may be wasted when a server computer is running in which the server computer is not being used. While the waste may not be as large on an individual scale, the cumulative waste of a large number of individual servers running at any time can be quite costly.
A similar issue exists with large infrastructures using a plurality of servers. If a large number of client computing devices connect to a first server computer, a second server computer will be spun up to handle future overload. If the estimate future overload does not arrive or does not arrive immediately, then a company will have to pay for usage of one of the servers even though the server is not performing a function. Even if some client computing devices are offloaded from the first server computer to the second server computer, a company is still paying for adding server space that is not being used. Additionally, the predictive model of spinning up server computers can run into problems if data is requested from a server at an unexpected time or location. If a server is not currently running to fulfill a client request, then the client computing device may receive an error. To avoid failures to service client computing devices, servers must be constantly running to handle unexpected data requests.
If a client computing device attempts to access a server that is not online or is otherwise unreachable, the client computing device will receive an error indicating that a connection cannot be made. The client computing device can then respond by connecting to a proxy server and requesting that the proxy server spin up the server that the client computing device is attempting to access. The proxy server will initiate the steps to spin up the server computer and then wait for a response from the server computer indicating that the server computer is online. The proxy server then sends the IP address and hostname of the server computer to the client computing device so that the client computing device can access the server directly.
The steps for turning on and connecting to a private server can be cumbersome for a user of a client computing device. This problem is amplified if the user of the client computing device is not technically savvy, given the large number of steps that have to be manually performed by the user. Even accessing a server within a user's own home can become difficult due to network security such as firewalls. A user must still contact an outside service to identify how to access a home server before being able to directly connect a client computing device to the home server.
Thus, there is a need for a system which can eliminate the inefficiencies of running servers when they are unnecessary without causing the client computing devices to run into errors upon attempting to access an offline server.